﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AccesoBD;
using System.Data.SqlClient;



namespace GAIA_Logica
{

    public class Elemento
    {
        #region Atributos
        /// <summary>
        /// Atributos de la clase
        /// </summary>
        private int id;

        public int Id
        {
            get { return id; }
            set { id = value; }
        }
        
        private double lambertN = 0;

        public double LambertN
        {
            get { return lambertN; }
            set { lambertN = value; }
        }
        private double lambertE = 0;

        public double LambertE
        {
            get { return lambertE; }
            set { lambertE = value; }
        }

        private double crtm05N = 0;

        public double Crtm05N
        {
            get { return crtm05N; }
            set { crtm05N = value; }
        }

        private double crtm05E = 0;

        public double Crtm05E
        {
            get { return crtm05E; }
            set { crtm05E = value; }
        }

        private double tamano;

        public double Tamano
        {
            get { return tamano; }
            set { tamano = value; }
        }
        private double dap;

        public double Dap
        {
            get { return dap; }
            set { dap = value; }
        }
        private double hc;

        public double Hc
        {
            get { return hc; }
            set { hc = value; }
        }
        private double volumen;

        public double Volumen
        {
            get { return volumen; }
            set { volumen = value; }
        }
        private double areaBasal;

        public double AreaBasal
        {
            get { return areaBasal; }
            set { areaBasal = value; }
        }
        private int idEspecie;

        public int IdEspecie
        {
            get { return idEspecie; }
            set { idEspecie = value; }
        }
        private int numero = 0;

        public int Numero
        {
            get { return numero; }
            set { numero = value; }
        }
        
        private int idCenso;

        public int IdCenso
        {
            get { return idCenso; }
            set { idCenso = value; }
        }

        private string tipoTerreno;
        public string TipoTerreno
        {
            get { return tipoTerreno; }
            set { tipoTerreno = value; }
        }

        //private string nombre;//folio registro nacional

        //Conexion a base de datos
        private static AcessoBD dba = new AcessoBD(Properties.Settings.Default.GAIA_CON);

        #endregion

        #region Constructor

        //Default
        public Elemento()
        {

        }

        public Elemento(double dap, double hc, double volumen_total, double area_basal, int id_especie, int id_estudio, double plambertN, double plambertE, double pcrmt05N, double pcrmt05E)
        {
            this.Dap = dap;
            this.Hc = hc;
            this.Volumen = volumen_total;
            this.AreaBasal = area_basal;
            this.IdEspecie = id_especie;
            this.IdCenso = id_estudio;
            this.LambertE = plambertE;
            this.LambertN = plambertN;
            this.Crtm05E = pcrmt05E;
            this.Crtm05N = pcrmt05N;
            /*this.TipoTerreno = ptipoTerreno;*/
        }


        #endregion


        #region Metodos


        //Ingresar elementos
        public bool ingresaElemento()
        {

            bool result = false;

            try
            {


                //Query
                String sqlQuery = "Insert into InventarioTerreno (lambertN,lambertE,crtm05N,crtm05E,dap,hc,valor_total,area_basal,id_especie,numero,id_censo,tipo_terreno)  values(param2,param3,param4," +
                                  "param5,param6,param7,param8,param9,param010,param011,param012,param013)";

                //Lista parametros
                Parametros[] parametros = new Parametros[12];

                parametros[0] = new Parametros(this.LambertN+"", "param2");
                parametros[1] = new Parametros(this.LambertE + "", "param3");
                parametros[2] = new Parametros(this.Crtm05N + "", "param4");
                parametros[3] = new Parametros(this.Crtm05E + "", "param5");
                parametros[4] = new Parametros(this.Dap + "", "param6");
                parametros[5] = new Parametros(this.Hc + "", "param7");
                parametros[6] = new Parametros(this.Volumen + "", "param8");
                parametros[7] = new Parametros(this.AreaBasal + "", "param9");
                parametros[8] = new Parametros(this.IdEspecie, "param010");
                parametros[9] = new Parametros(this.Numero, "param011");
                parametros[10] = new Parametros(this.IdCenso, "param012");
                parametros[11] = new Parametros(this.TipoTerreno, "param013");

                result = dba.executeSQL(sqlQuery, parametros);

            }
            catch (Exception ex)
            {
                logErrores.registrarError("Ingresar elemento en" + this.idCenso, ex.Message);
                throw new Exception("Ocurrio un error a la hora de ingresar el elemento: " + ex.Message);
            }

            return result;
        }

        public static bool borrarElementosEstudio(int pcodEstudio)
        {
            String sqlQuery = "Delete InventarioTerreno where id=" + pcodEstudio;
            bool result = dba.executeSQL(sqlQuery, null);
            return result;
        }


        //Ingresar elementos
        public bool ingresaElemento1()
        {

            bool result = false;

            try
            {


                //Query
                String sqlQuery = "Insert into InventarioTerreno" +
                                  " (lambertN, lambertE, dap, hc, valor_total, area_basal, id_especie, numero, id_censo)" +
                                  " values(" +
                    this.LambertN + "," +
                    this.LambertE + "," +
                    //this.Crtm05N + "," +
                    //this.Crtm05E + "," +
                    this.Dap + "," +
                    this.Hc + "," +
                    this.Volumen + "," +
                    this.AreaBasal + "," +
                    this.IdEspecie + "," +
                    this.Numero + "," +
                    this.IdCenso + ")";

                //Lista parametros
                /* Parametros[] parametros = new Parametros[11];
                 parametros[0] = new Parametros(this.LambertN, "param2");
                 parametros[1] = new Parametros(this.LambertE, "param3");
                 parametros[2] = new Parametros(this.Crtm05N, "param4");
                 parametros[3] = new Parametros(this.Crtm05E, "param5");
                 parametros[4] = new Parametros(this.Dap, "param6");
                 parametros[5] = new Parametros(this.Hc, "param7");
                 parametros[6] = new Parametros(this.Volumen, "param8");
                 parametros[7] = new Parametros(this.AreaBasal, "param9");
                 parametros[8] = new Parametros(this.IdEspecie, "param010");
                 parametros[9] = new Parametros(this.Numero, "param011");
                 parametros[10] = new Parametros(this.IdCenso, "param012");*/

                result = dba.executeSQL(sqlQuery, null);

            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrio un error a la hora de ingresar el elemento: " + ex.Message);
            }

            return result;
        }


        //Get elementos de censo    

        public List<Elemento> getElementosCenso(int idCenso)
        {

            List<Elemento> listaElementos = new List<Elemento>();
            string sqlQuery = "Select * from InventarioTerreno where id_censo=" + idCenso;

            try
            {
                SqlDataReader rs = dba.execute_Consulta(sqlQuery, null);

                if (rs != null)
                {
                    while (rs.Read())
                    {
                        Elemento objEl = new Elemento();
                        objEl.Id = rs.GetInt32(rs.GetOrdinal("id"));
                        objEl.LambertN = Convert.ToDouble(rs.GetString(rs.GetOrdinal("lambertN")));
                        objEl.LambertE = Convert.ToDouble(rs.GetString(rs.GetOrdinal("lambertE")));
                        objEl.Crtm05E = Convert.ToDouble(rs.GetString(rs.GetOrdinal("crtm05E")));
                        objEl.Crtm05N = Convert.ToDouble(rs.GetString(rs.GetOrdinal("crtm05N")));
                        objEl.Dap = Convert.ToDouble(rs.GetString(rs.GetOrdinal("dap")));
                        objEl.Hc = Convert.ToDouble(rs.GetString(rs.GetOrdinal("hc")));
                        objEl.Volumen = Convert.ToDouble(rs.GetString(rs.GetOrdinal("valor_total")));
                        objEl.AreaBasal = Convert.ToDouble(rs.GetString(rs.GetOrdinal("area_basal")));
                        objEl.IdEspecie = rs.GetInt32(rs.GetOrdinal("id_especie"));
                        //objEl.Numero = rs.GetInt32(rs.GetOrdinal("numero"));
                        objEl.IdCenso = rs.GetInt32(rs.GetOrdinal("id_censo"));

                        listaElementos.Add(objEl);

                    }
                }



            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrio un error a la hora de obtener los elmentos del censo: " + ex.Message);
            }

            return listaElementos;

        }


        public bool borrarElemento()
        {
            bool result = false;

            string sqlQuery = "Delete from InventarioTerreno where id_censo = param1";

            //Lista parametros
            Parametros[] parametros = new Parametros[1];
            parametros[0] = new Parametros(this.IdCenso, "param1");

            try
            {
                result = dba.executeSQL(sqlQuery, parametros);
            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrio un error a la hora de remover el elemento: " + ex.Message); //Borrar el elemento
            }

            return result;
        }

        #endregion
    }

}

